2

我正在为 android 设备的网站编写测试用例。我需要从页面的下拉列表中选择一个选项。但似乎 android web 驱动程序没有提供任何解决方案。

我尝试了 Select API,但它不起作用。

代码片段

      Select loginType = new Select(this.driver.findElement(By.xpath(LOGIN_TYPE_CHOICE)));
      loginType.selectByValue("smartphone");
      driver.findElement(By.id(LOGIN_BUTTON)).click();

寻找一些解决方法。

4

3 回答 3

3

我正在使用 c# 对 android、firefox Chrome 和 IE 运行 selenium 测试,并且我发现了与 android 驱动程序相同的问题。

这对我有用:(如果您根据 Java 约定重构代码,它应该在 java 中工作)

string jsToBeExecuted="document.getElementById('<insert dropdown Id here>').selectedIndex=<insert index here>";

IJavaScriptExecutor jsExecutor = (IJavaScriptExecutor)this.Driver;
jsExecutor.ExecuteScript(jsToBeExecuted);

请注意,屏幕上不会呈现任何更改!!!

在提交带有所选索引的元素时,将被使用。如果您想对其添加一些调整以通过文本或任何您喜欢的方式选择元素,这取决于您。

于 2013-03-07T15:04:31.810 回答
0

根据我对使用 selenium 的自动化 Web 应用程序的经验,我有以下假设。据我所知,selenium 无法与下拉选项直接交互,因为它们被认为是不可见的(不活动的)。它始终有效的方式是为此使用 js。首先使用 css 选择器正确定位元素并使用 firepath 验证它(附加到 fox 中的 firebug) 在此处输入图像描述

所以你有 css 选择器:

String css=....;
public void jsClickByCss(String cssLocator){
JavascriptExecutor js = (JavascriptExecutor) driver;
        StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("var x = $(\'"+cssLocator+"\');");
        stringBuilder.append("x.click();");
        js.executeScript(stringBuilder.toString());
}
jsClickByCss(css);

您还可以尝试使用Builder的另一种方法,即高级用户交互 API:这个想法非常简单。首先,您应该使下拉列表向下滚动,以便您想要单击的元素变得可见,等待 driver.manage.timeout 然后选择所需的下拉元素并单击。

WebElement mnuElement;
WebElement submnuElement;
mnEle = driver.findElement(By.Id("mnEle")).click();
sbEle = driver.findElement(By.Id("sbEle")).click();

Actions builder = new Actions(driver);
// Move cursor to the Main Menu Element
builder.MoveToElement(mnEle).perform();
// Giving 5 Secs for submenu to be displayed
Thread.sleep(5000L);
// Clicking on the Hidden SubMenu
driver.findElement(By.Id("sbEle")).click();

你可以在这里阅读一些额外的信息 希望这对你有用)

于 2012-09-12T12:20:00.547 回答
0

这是Ruby的解决方案:

要从列表中选择值需要执行 javascript,这里是示例:

HTML:

<select id="select_id">
   <option id="option_id_1" value="value_1" name="OPTION1"> OPTION1 </option>
   <option id="option_id_2" value="value_2" name="OPTION2"> OPTION2 </option>

更新:更简单的方法:$('#select_id').val(value_1)

代码:通过 id 属性查找元素:

browser.execute_script("$('#select_id').val($('#option_id_1').val())")

按名称属性查找元素:

browser.execute_script("$('#select_id').val($('option[name=OPTION2]').val())")

非常适合我。

于 2013-01-16T01:38:27.787 回答