我有自动化项目使用Selenium,它会调用Chrome webdriver并运行testcase。
但是Chromedriver在网站上通过聚合物框架构建了元素,我们可以通过检查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:没有这样的元素:无法找到元素:{"方法":" xpath","选择器":" / / * [@ class =' style-scope shop-home'] / 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米,Selenium-server-standalone版本2.53,ChromeDriver版本2.23
我用过FirefoxDriver工作正常。我使用Firefox版本4.6
那么无论如何都要通过chromedriver为Polymer网站运行自动化脚本吗?
非常感谢
答案 0 :(得分:1)
由于我不能使用评论,因为我是新手,添加@lauda答案,Polymer使用Shadow DOM。但是,Firefox和Chrome网页的结果页面源之间存在差异,无法进行样式设置。有时文档级CSS会覆盖Shadow DOM元素的局部样式。即使是“立即购买”元素的外观在两个浏览器中也是不同的。
如前所述,您需要修改定位器以删除类值。也许为你想要的元素添加id。
答案 1 :(得分:0)
找不到元素,因为浏览器之间存在一些差异。
在这种情况下,您应该在两个浏览器中手动检查选择器。
如果您要检查Chrome浏览器,您会看到该类"样式范围的商店 - 家庭"不见了。
我建议使用基于href的选择器。以下是xpath和css选择器的变体。
//shop-button/a[contains(@href, 'list')]
或
shop-button a[href*=list]
当您知道页面可能与浏览器不同时,请始终检查两个浏览器中的选择器。