-1

当我使用IEDriver没有兼容性视图执行我的脚本时,我的测试脚本运行没有任何问题。

但是,如果我在兼容性视图中添加域后执行相同的脚本,则找不到某些元素并且我会遇到异常。

例如,我想从此 DOM 中获取所选项目的文本:

<select id="selectNumber" name="selectNumber" style="width:180px;">
    <option selected="selected" value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
</select>

我正在使用 XPath .//*[@id='selectNumber']/option[@selected='selected'] 来获取文本,但它不起作用。

我刚刚检查了在 IE DOM selected="selected"中不显示所选选项,直到我手动更改文档版本。

4

2 回答 2

2

您可以使用Select适用于每个浏览器的类。这是一些代码

Select sel = new Select(driver.findElement(By.id("selectNumber")));
WebElement selectOption = sel.getFirstSelectedOption();
String text = selectOption.getText();
于 2016-10-04T11:43:31.263 回答
0

我认为您应该考虑从 using 更改XPath为 use cssSelector。找到元素要安全得多,而不是依赖于整个“路径”。cssSelector使用运行时它很有可能不会中断IEDriver(如您在问题中所述)。

两者都可以实现相同的目标,但是当您使用 XPath 时,您的 DOM 对更改更加敏感,并且您更有可能在页面更改后看到测试被破坏。

对于您的情况,您可以通过两种方式使用它:

XPath(你必须拥有它)

  1. driver.findElement(By.xpath(".//*[@id='selectNumber']/option[@selected='selected']"))

选择器

  1. driver.findElement(By.cssSelector("#selectNumber[selected]"))

当你有更复杂的“路径”时,你可以在 cssSelectors 中组合更多的东西,比如 CSS 类。例如(当您没有 ID 时):

<select class"nice-dropdown" name="selectNumber" style="width:180px;">
    <option selected="selected" value="1">1</option>
    <option value="2">2</option>
    <option value="3">3</option>
    <option value="4">4</option>
</select>

driver.findElement(By.cssSelector("select.nice-dropdown"))(返回选择元素) driver.findElement(By.cssSelector("select.nice-dropdown option[value='3']"))(返回 value=3 的选项)

selectors你有更短的“路径” 。它们的工作方式与 CSS 中使用选择器的方式相同。

作为参考:

希望这些信息在某种程度上有所帮助。

于 2016-10-05T12:07:35.307 回答