- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Selenium 来测试我的用户界面。
我正在尝试使用@FindBy-Annotation。下面这段代码工作正常:
@FindBy(how=How.XPATH, xpath ="//input[contains(@id,'idOfInputField')]")
private WebElement someWebElement;
private void someMethod(){
WebElement a = someWebElement.findElement(By.xpath("//a[contains(@class, 'ui-spinner-up')][1]"));
WebElement span1 = a.findElement(By.xpath("//a[contains(@class, 'ui-spinner-up')][1]"));
WebElement span2 = span1.findElement(By.xpath("//span[contains(@class, 'ui-button-text')][1]"));
WebElement b = span2.findElement(By.xpath("//span[contains(@class,'ui-icon ui-icon-triangle-1-n')]"));
b.click();
}
我想使用下面的代码,因为它是基于注释的,但它不起作用,尽管我认为它完全一样:
@FindBy(how=How.XPATH, xpath ="//input[contains(@id,'idOfInputField')]"
+ "//a[contains(@class, 'ui-spinner-up')][1]"
+ "//a[contains(@class, 'ui-spinner-up')][1]"
+ "//span[contains(@class, 'ui-button-text')][1]"
+ "//span[contains(@class,'ui-icon ui-icon-triangle-1-n')]")
private WebElement someWebElement;
pivate void someMethod(){
someWebElement.click();
}
我得到的是以下异常:
java.lang.RuntimeException: Cannot invoke click on element null. Cannot find it.
Cause: org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//input[contains(@id,'idOfInputField')]//a[contains(@class, 'ui-spinner-up')][1]//span[contains(@class, 'ui-button-text')][1]//span[contains(@class,'ui-icon ui-icon-triangle-1-n')]"}
Command duration or timeout: 14 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.32.0', revision: '6c40c187d01409a5dc3b7f8251859150c8af0bcb', time: '2013-04-09 10:39:28'
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.5.0-28-generic', java.version: '1.7.0_21'
Session ID: 92f605a1-0a63-4ba0-b290-ca724b3c6386
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=20.0}]
at path.to.package.utils.StaleReferenceAwareFieldDecorator$StaleReferenceAwareElementLocator.in
voke(StaleReferenceAwareFieldDecorator.java:86)
at com.sun.proxy.$Proxy9.click(Unknown Source)
at
....
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:69)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:48)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28)
at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:31)
at org.junit.runners.ParentRunner.run(ParentRunner.java:292)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
有人可以解释这种行为的原因是什么,或者这两段代码之间是否真的存在差异?
最佳答案
首先,您不能使用如此复杂的 xpath,它会破坏页面对象的可读性。您的选择器应尽可能简洁。其次,你不应该使用 XPATH 而使用 CSS 选择器。现在回到你的问题,
@FindBy(css="span[class*='ui-icon-triangle-1-n']")
WebElement b;
或者试试
@FindBy(css="span[class*='ui-button-text']>span[class*='ui-icon-triangle-1-n']")
WebElement b;
关于xpath - Selenium - @FindBy 和 WebElement.findElement() 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17819905/
在driver.findElements()中,我们获得了另一个用于查找size()的函数,该函数在driver.findElement()中不可用。 这是唯一的区别吗? 最佳答案 driver.fi
当我尝试使用 webDriver 搜索一个或多个元素时,它没有返回任何内容。操作系统:Ubuntu 14.04,框架:Intellij Idea,语言:Java。 我有这些声明: WebDriver
还是它们只影响 findElement?例如,如果我想测试页面上不存在的元素,我是要使用findElement(由于隐式等待会很慢),还是可以使用findElements(..).size() ==
我正在使用 WebElement.findElement(By.cssSelector('')).click(); 在页面上查找元素,但它返回了 “无法定位元素” ,但是当我使用 WebDriver.
当我执行下面的代码时,代码工作得很好 WebElement element = driver.findElement(By.xpath("String1")); element.findElement
我正在使用 Protractor(Angular JS 的 webdriver 包装器),尽管我可以无限期地将 findElement 链接到单个 WebElement 实例,但当我尝试时会收到错误使
为什么要使用@FindBy和driver.findElement()? @FindBy迫使我将所有变量都移到类级别(大多数变量只需要在方法级别时使用)。似乎唯一能买到我的东西是我可以调用PageFac
无法在 Google map 中找到元素。 ::::: :::::: :::::: 我尝试使用此方法,但没有成功选择具有“gm-
我正在 Selenium Webdriver 中编写代码。我必须点击 HTML 代码为 的按钮 我的代码就像下面一样简单 driver.findElement(By.id("aui_3_4_0_1_
MobileElement followButton = (MobileElement) driver.findElement(By.xpath("//android.widget.ListView[
我完全陷入困境,不知道为什么我会得到这样的输出。这是相关的片段。 WebElement section = driver.findElement(By.xpath("//div[contains(@c
我需要一些帮助来尝试从以下网站获取本圣经章节的每一节经文作为数据框中的一行字符串。 我正在努力寻找正确的元素/不知道如何将 findElements() 与浏览器中的检查元素结合使用。任何关于如何对其
我需要获取所有文章标题的列表。但由于某种原因,Selenium 返回了文章 WebElement 的同一实例 3 次。网页 HTML 如下所示:
列表中的第一个很容易,因为您可以使用查找元素。我找到该元素并需要从前面和后面的 div 中获取信息。对于列表中的“n”元素,用于移动/向后到其他关联 div 的 xPath 语法是什么? 我尝试了各种
我正在尝试在我的框架中创建一个显式等待方法来处理用户的输入。该方法应该处理所有类型的搜索:id、xpath 和 css。但是,当我尝试测试此方法时,错误返回一个奇怪的错误 显式等待方法 public
我正在尝试查找从 PCA Predict API 生成的元素(可在此链接中找到)。 http://www.pcapredict.com/en-gb/address-capture-software/
来自维基文档 https://github.com/SeleniumHQ/selenium/wiki/PageFactory我发现,如果脚本使用 eg. 找到了一些元素@FindBy(id = "q"
代码 1 resultsBoard.findElements(By.css(mySelector)).then(function(elements) { elements.forEach(func
我这里的代码行是: List element = driver.findElements(By.xpath("*")); for(int i=0; i element = driver.findEle
在使用 Selenium 网络测试时,有几种方法可以识别 WebElements。 根据我的经验,我使用过以下选择器: 类名 - By.className() CSS 选择器 - By.cssSele
我是一名优秀的程序员,十分优秀!