【问题标题】:Selenium 2 /WebDriver Migration Issue WebDriver Does not select correct elementsSelenium 2 /WebDriver 迁移问题 WebDriver 没有选择正确的元素
【发布时间】:2011-08-25 21:38:56
【问题描述】:

我正在将我的测试套件从 Selenium 1 迁移到 WebDriver。我在单击包含美国可点击州地图的页面上的元素时遇到问题。

使用 Selenium 1 我将执行以下操作以从地图中选择特定状态。

selenium.click("css=area[alt=North Carolina]");

在 Selenium 2 中,我将其转换为

driver.findElement(By.cssSelector("area[alt=North Carolina]")).click();

WebDriver 实际上选择了不同的状态。这不是时间问题,选择了一个状态它只是不正确的状态。我尝试用相同的结果为 xpath 切换 cssselector。

不确定这是否与this issue有关

操作系统:Win XP

浏览器:在 IE 8 和 FF 5 & 6 上测试

硒:2.5.0

页面代码示例

<area alt="California" shape="POLY" coords="10,60,29,68,25,98,56,146,51,167,17,138,3,70"   href="javascript:LoadCategory('CA');">

【问题讨论】:

  • 你确定这些状态是独特的元素吗? List states = driver.findElements(By.cssSelector("area[alt=North Carolina]")); System.out.println(states.size); //这是1吗?有没有公​​共网站可以让我试试这个?
  • 有趣。如果我在名称中没有空格的州​​(加利福尼亚等)执行您提供的测试,我会得到 1。如果我使用带空格的州,我会收到错误消息。 "An invalid or illegal string was specified" 尽管如此,即使使用这种方法来选择没有空格的状态,它仍然会选择错误的状态(或根本没有选择)。这是一个示例网站:link
  • 接下来,如果 alt 标签包含空格,您必须将其包装起来以便 webdriver 找到它。 IE。 (By.cssSelector("area[alt='North Carolina']")) 唉,还是没有选择正确的元素。

标签: java selenium webdriver


【解决方案1】:

查看您提供的页面的 HTML,似乎 CA、AZ、OH 等州有单独的页面。还有一些其他州(其中大部分)如 NM、MT 等都有公共页面。就 webdriver 而言,我不确定为什么它没有点击正确的元素。我写了类似下面的东西,对我有用。您必须将此逻辑扩展到其他状态。

WebDriver driver = new FirefoxDriver();
driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS);
driver.get("http://www.servsafe.com/catalog/starterscategories.aspx");
Selenium selenium = new WebDriverBackedSelenium(driver, driver.getCurrentUrl());
selenium.windowMaximize();
((JavascriptExecutor)driver).executeScript("javascript:LoadCategory('CA');");

同样,您可以对其他具有单独页面的州执行此操作,例如

((JavascriptExecutor)driver).executeScript("javascript:LoadCategory('AZ');");
((JavascriptExecutor)driver).executeScript("javascript:LoadCategory('FL');");

对于有公共页面的状态,

((JavascriptExecutor)driver).executeScript("javascript:LoadCategory();");

【讨论】:

  • 此解决方案适用于页面,但似乎不是最佳的。 WebDriver 应该能够“点击”这些单独的元素,这似乎是 webdriver 中的一个错误,因为它在 Selenium 1 中正常运行。
  • 我同意。您可能还想在 webdriver google 群组上发布问题 - groups.google.com/group/webdriver
  • @Brett 我建议你在这里打开一个缺陷code.google.com/p/selenium/issues/list 你确实有一个公共网站,开发人员可以在其中重现问题,并且是调试和修复的理想情况。也许它也会解决其他社区成员面临的关于 click() 的其他模糊问题。
  • 谢谢!我开了一张票code.google.com/p/selenium/issues/…
【解决方案2】:

我建议使用 Javascript click() 方法。

例子,

new WebDriverBackedSelenium(driver,"").assignId("css=area[alt='California']", "California");
((JavascriptExecutor) driver).executeScript("document.getElementById('California').click()");

【讨论】:

  • document.getElementById("foo").click 不是函数。对于 Firefox、Chrome 等浏览器,您必须创建一个点击事件,如 var evObj = document.createEvent('MouseEvents'); evObj.initEvent('click',true,true); element.dispatchEvent(evObj);对于 IE,它在概念上是不同的。这应该可以, element.fireEvent('onclick');我在 Brett 的网站上试过,但对我不起作用。
猜你喜欢
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
相关资源
最近更新 更多