我正在尝试使用 Selenium Webdriver 自动化测试,而不需要xpath。当站点被修改然后xpath被更改时,我遇到问题。对于需要执行某些操作的元素(如按钮,下拉等),它需要xpath或其他一些东西来识别该元素。如果我想从站点获取数据(表内容)以验证其执行,那么在这里我需要大量的xpath来完成。 有没有更好的方法来避免某些xpath?
答案 0 :(得分:0)
您可以通过css选择器映射元素,而不是使用 xpath ,如下所示:
driver.findElement(By.cssSelector(“css selector”), OR
ID,如下:
driver.findElement(By.id( “coolestWidgetEvah”))
除此之外还有更多2.请参阅Selenium docomentation
答案 1 :(得分:0)
Selenium: Can I set any of the attribute value of a WebElement in Selenium?
或者你仍然可以使用'naked'xpath来定位你的元素。 “裸”是指泛型,所以不那么具体。
考虑下面这个元素:
div id =“username”
input class =“usernameField”按钮类型='提交
所以,不要像这样定位(具体/具有侵略性):
// DIV [@ ID = '用户名'] //输入[@类= 'usernameField'] //按钮[@类型= '提交']
您可以使用更温和的方法,省略特定值,如下所示:
// DIV [@id] //输入[@class] //按钮[@type]
不太可能在变化时破坏。但是,请注意,您需要100%确定使用第二种方法,您将找到一个独特的元素。在其他情况下,如果有多个按钮,则可能会选择错误的按钮或导致Selenium异常。
我会推荐Chrome的这个Xpath助手加载项,当xpath正确时会在屏幕上突出显示,并且还会显示有多少元素与Xpath匹配(即唯一或不唯一?)
希望以上,有道理,不要犹豫,问它是否没有!
祝你好运!
答案 2 :(得分:0)
Ofcoarse还有其他一些方法,不使用id / xpath / CSS甚至" sendKeys"。解决方案是通过Sikuli做到这一点。
要做的事情:
你必须下载Sikuli exe jar(sikulixsetup-1.1.0)。 (来自https://launchpad.net/sikuli/+download)
安装Sikuli exe jar,提取" sikulixapi"并添加到PATH变量。
添加外部jar" sikulixapi"通过Eclipse在项目级别。
现在拍摄要传递某些文字或点击的元素的图像。
使用Selenium Java代码中的图像参考来编写文本&执行点击。
这是一个简单的代码,可以浏览" https://www.google.co.in/"转到登录页面&输入Emailid&没有任何xpath或sendkeys的密码。
package SikuliDemo;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.sikuli.script.Pattern;
import org.sikuli.script.Screen;
public class SikuliDemoScript {
public static void main(String[] args) throws Exception
{
Screen screen = new Screen();
Pattern image1 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\gmailLogo.png");
Pattern image2 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\gmailSignIn.png");
Pattern image3 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\Email.png");
Pattern image4 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\EmailNext.png");
Pattern image5 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\Password.png");
Pattern image6 = new Pattern("C:\\Utility\\OP_Resources\\Sikuli_op_images\\SignIn.png");
System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.google.co.in/");
screen.wait(image1, 10);
screen.click(image1);
screen.wait(image2, 10);
screen.click(image2);
screen.type(image3, "selenium");
screen.click(image4);
screen.wait(image5, 10);
screen.type(image5, "admin123");
screen.click(image6);
driver.quit();
}
}
如果这回答了你的问题,请告诉我。