【问题标题】:selenium.getText finds element but selenium.click does notselenium.getText 找到元素但 selenium.click 没有
【发布时间】:2013-09-07 04:29:05
【问题描述】:

我有一个可以抓取内部文本的链接,但我无法点击它

driver.switchTo().activeElement();
String sTemp = selenium.getText("TabBar:LogoutTabBarLink");

以上工作正常

sTemp = "Log Out";
selenium.click("TabBar:LogoutTabBarLink");

上述失败:Element is no longer valid

【问题讨论】:

  • 我对您同时使用 Selenium RC 和 WebDriver 感到困惑。您使用WebDriver interface 的实例还是Selenium 的实例?您最初的标记和您的第一行代码说的是前者,但 getText()click() 方法来自后者。
  • 我真的不使用 RC。我只编写了几个星期的 selenium 代码,所以我很容易感到困惑。我通过首先设置驱动程序,然后设置硒来跨越两个世界: public void setDriver(WebDriver driver) { this.driver = new InternetExplorerDriver(); } public void setSelenium(Selenium selenium, String sURL) { this.selenium = new WebDriverBackedSelenium(driver, sURL); }
  • 如果可以,只使用 WebDriver 并忘记 Selenium 接口。 WebDriver 较新,有更好的 API,仍在开发中等。Selenium 已被官方弃用,2 年未开发,有它的缺点等。你必须使用 Selenium 吗?如果没有,请尝试将您的代码重写为等效的 WebDriver 并查看问题是否消失。
  • 感谢您的建议,我将放弃 Selenium 接口。谷歌让找到随机解决方案变得太容易了!另一个好心人(下)告诉我使用 xpath,所以我会用它来运行。

标签: java selenium webdriver selenium-webdriver selenium-rc


【解决方案1】:

您真的很想使用 Selenium 2(又名 Web 驱动程序),它更快更可靠。所以忘记 Selenium 1,除非你有充分的理由使用它。你的代码应该是这样的

WebDriver driver = new FirefoxDriver(); //or any other, like ChromeDriver or OperaDriver
WebElement element = driver.findElement(By.id("idOfYourElement");
element.click();
String text = element.getText();

另见5 minute getting started guide

【讨论】:

  • 我终于想通了。菜鸟失误。此 Web 应用程序遵循外部链接,执行一些操作,然后返回控制权。
  • 我很高兴你解决了它。也许还有一件事,您应该接受您认为最有帮助的答案:-)
【解决方案2】:

尝试仅使用 WebDriver,并通过 id 或 xPath(如果没有 id)获取元素。

您可以为 xpath 编写这样的代码:

driver.switchTo().activeElement();
WebElement element = driver.findElement(By.xpath(/*Insert xpath Here */);
element.click();

您可以在 Firefox 中使用 Firebug 或在 Chrome 中使用 Chrome 的调试器来查找元素的 xpath。

如果它有一个 id,你可以类似地通过 id 找到元素(它更快,因此更可取):

WebElement element = driver.getElement(By.id(/*Insert id Here */);

请参阅我对 this question 的回答,了解有关通过 id 和/或 xpath 查找的更多有用信息。

【讨论】:

  • 谢谢。到目前为止,我一直在通过 HTML id 查找元素,(感谢 Mozilla FireBug)所以现在我将使用 xpath。
  • 除了生成(并因此更改)id 之外,使用 id 总是比使用任何类型的 XPath 表达式更好。
  • 如果它有一个id,你应该使用id,因为它更快。更新我的答案以提及这一点。我只建议 xpath 以防元素没有 id 并且您无法更改它。
  • 根据经验,按 ID 选择比按类好,比与 XPath 差不多的 CSS 好。标签名称和链接文本有自己的小世界,所以我把它们排除在外。
  • 我终于想通了。菜鸟失误。我的应用程序遵循外部链接,做一些事情,然后返回控制权。这是我返回主应用程序后所做的事情:pca.driver.switchTo().activeElement(); pca.driver.switchTo().frame(pca.driver.findElement(By.id("top_frame")));在我的程序开始时,我在实例化 IE8 浏览器后立即执行 switchTo().frame。我只好再做一次。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2018-06-28
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-06
  • 1970-01-01
相关资源
最近更新 更多