Espresso Android,点击 WebView 元素错误

Posted

技术标签:

【中文标题】Espresso Android,点击 WebView 元素错误【英文标题】:Espresso Android, clicking on WebView elements error 【发布时间】:2015-11-17 15:41:08 【问题描述】:

我正在使用 Espresso 进行仪器测试。我正在使用支持 WebView 的最新 Espresso 库:

https://google.github.io/android-testing-support-library/docs/espresso/web/

我曾经在 Espresso 上使用 webViews,我设法让它工作。但这一次我不确定这是否可能。 webView 中有一个微调器,单击它,它应该显示项目列表。我在单击那个微调器时遇到问题。 WebView源代码:

    <div class="row select-box">
    <div class="medium-4 columns">
        <label for="MultipaysSessionSenderBankCode" class="inline">Bank name</label>    </div>
    <div class="medium-8 columns">
        <input type="hidden" name="data[MultipaysSession][sender_bank_code]" id="" value=""><select name="data[MultipaysSession][sender_bank_code]" class="hide-first" data-toggler="" data-value="other" data-show="other-bank" id="MultipaysSessionSenderBankCode">
<option value="">Please select your bank</option>
<option value="00000">Demo Bank</option>
<optgroup label="Top banks">
<option value="24900005">Alior Bank</option>
<option value="10900004">Bank Zachodni WBK (plus d. Kredyt Bank)</option>
<option value="10500103">ING Bank Śląski</option>
<option value="11402004">mBank</option>
<option value="11400000">mBank (d. MultiBank)</option>
<option value="11602202">Millennium Bank</option>
<option value="12401428">Pekao (UniCredit)</option>
<option value="10200003">PKO BP (iPKO, iPKONET)</option>
<option value="10205558">PKO BP (Inteligo)</option>
</optgroup>
<optgroup label="Other banks">
<option value="20300003">Bank BGŻ</option>
<option value="10600005">Bank BPH</option>
<option value="13200006">Bank Pocztowy</option>
<option value="19300005">Bank BPS (E25)</option>
<option value="16000003">BNP Paribas (d. Fortis Bank)</option>
<option value="15401056">BOŚ Bank</option>
<option value="10300022">Citibank Handlowy</option>
<option value="19400008">Credit Agricole (d. Lukas Bank)</option>
<option value="19101048">Deutsche Bank</option>
<option value="14700002">Eurobank</option>
<option value="14600009">Getin Bank</option>
<option value="16800007">PLUS Bank (d. INVEST-BANK)</option>
<option value="17500009">Raiffeisen Polbank</option>
<option value="24901044">T-Mobile Usługi Bankowe (d. Alior Sync)</option>
<option value="21300004">Volkswagen Bank</option>
</optgroup>
<option value="other">Other ...</option>
</select>   </div>
</div>

现在我想在 Espresso 中找到这个微调器并单击它(它会显示带有项目的 android 对话框)。我尝试这样的事情:

onWebView().withElement(findElement(Locator.ID, "MultipaysSessionSenderBankCode")).perform(webClick());

或者,

onWebView().withElement(findElement(Locator.CLASS_NAME, "data[MultipaysSession][sender_bank_code]")).perform(webClick());

定位器文档:http://developer.android.com/reference/android/support/test/espresso/web/webdriver/Locator.html

但无论我尝试什么,我都会收到此错误:

java.lang.RuntimeException: java.lang.RuntimeException: Fatal exception checking document state: Evaluation: status: 13 value: message=Refused to evaluate a string as javascript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".
 hasMessage: true message: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self'".

这是否意味着某种安全措施阻止我用 espresso 触摸此视图?

【问题讨论】:

你找到解决办法了吗? 对不起,我很久没接触这个问题了,但我需要尽快回到它。如果我发现了什么,我会通知你。 我也想知道是否找到了解决方案。有消息吗? 【参考方案1】:

您的 id 标签为空。考虑这样做

> <div class="medium-8 columns">
>     <input type="hidden" name="data[MultipaysSession][sender_bank_code]" id="MyIdForThisUI"
> value=""><select name="data[MultipaysSession][sender_bank_code]"
> class="hide-first" data-toggler="" data-value="other"
> data-show="other-bank" id="MultipaysSessionSenderBankCode">

然后:

onWebView().withElement(findElement(Locator.ID, "MyIdForThisUI")).perform(webClick());

【讨论】:

以上是关于Espresso Android,点击 WebView 元素错误的主要内容,如果未能解决你的问题,请参考以下文章

Android Espresso点击ImageButton点击错误位置

Android Spinner在Espresso测试中点击后立即被解雇

Android 自动化测试 Espresso篇:异步代码测试

在回收站视图上点击第一个匹配的文本 Android espresso 测试

Espresso - 点击对话框的按钮

成功点击并阻止 60 秒后,Espresso 测试失败