【问题标题】:Selenium: chromedriver can not find element on Polymer websiteSelenium:chromedriver 在 Polymer 网站上找不到元素
【发布时间】:2016-12-17 22:43:12
【问题描述】:


我有使用 Selenium 的自动化项目,它会调用 Chrome webdriver 并运行测试用例。

但是Chromedriver不能在Polymer framework构建的网站上添加元素,
我们可以通过F12查看元素。但是chromedriver找不到元素。

例如:这里是网站的网址https://shop.polymer-project.org/ 我们不能使用 ChomeDriver 来查找元素内部节点“shadow-root”。 这里代码:

System.setProperty("webdriver.chrome.driver", "chromedriver_win_2.23.exe");
WebDriver driver = new ChromeDriver();
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
driver.get("https://shop.polymer-project.org/");
Thread.sleep(5000);

System.out.println(driver.getTitle());
System.out.println(driver.getPageSource());
WebElement shopnowbtn = driver.findElement(By.xpath("//shop-button/a"));
shopnowbtn.click();

这里是错误

线程 "main" org.openqa.selenium.NoSuchElementException 中的异常:没有这样的元素:无法找到元素:{"method":"xpath","selector":"//*[@class='style-范围店家']/a"} (会话信息:chrome=52.0.2743.116) (驱动程序信息:chromedriver=2.23.409699 (49b0fa931cda1caad0ae15b7d1b68004acd05129),platform=Windows NT 6.1.7601 SP1 x86_64)(警告:服务器未提供任何堆栈跟踪信息) 命令持续时间或超时:10.04 秒

我的一些信息:Chrome 版本 52.0.2743.116 m,Selenium-server-standalone 版本 2.53,ChromeDriver 版本 2.23
我用过 FirefoxDriver 工作正常。我使用 Firefox 4.6 版

那么有没有办法通过 chromedriver 为 Polymer 网站运行自动化脚本?
非常感谢

【问题讨论】:

  • 您是否尝试降级您的 chrome 版本。我想这可能是由于版本兼容性。看到这个sites.google.com/a/chromium.org/chromedriver/downloads
  • 嗨西瓦。我正在使用最新版本的 chrome。
  • 在这种情况下,我建议尝试将 chrome 浏览器版本降级到 51。只是预感。

标签: selenium polymer selenium-chromedriver


【解决方案1】:

无法找到该元素,因为浏览器之间存在一些差异。

在这种情况下,您应该手动检查两个浏览器中的选择器。

如果您在 chrome 浏览器上进行检查,您会发现缺少“style-scope shop-home”类。

我建议使用基于 href 的选择器。这是 xpath 和 css 选择器的变体。

//shop-button/a[contains(@href, 'list')]

shop-button a[href*=list]

当您知道页面可能因浏览器而异时,请务必检查两个浏览器中的选择器。

【讨论】:

  • 嗨,感谢您的评论,我在 chrome 上检查了正确的定位器。我错误地发表了这条评论。更多信息。 Polymer 框架尚不支持 chromedriver 2.23。 (我使用的是 selenium 3.0 beta 2)
【解决方案2】:

由于我是新手,所以我不能使用评论,添加到@lauda 的答案中,Polymer 使用 Shadow DOM。但是对于 Firefox 和 Chrome 的样式,网页的结果页面源之间存在差异。有时文档级 CSS 会覆盖 Shadow DOM 元素的本地样式。甚至“立即购买”元素的外观在两个浏览器中也不同。

如前所述,您需要修改定位器以删除类值。也许将 id 添加到您想要的元素中。

【讨论】:

    猜你喜欢
    • 2020-03-24
    • 1970-01-01
    • 2021-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-16
    相关资源
    最近更新 更多