使带有许多XPath的硒代码更易读

时间:2019-01-10 10:39:20

标签: c# selenium xpath readable

我注意到,当我使用Selenium Web驱动程序与网页上的元素进行交互时,我的代码变得不可读,因为我使用了很多XPath-s来查找此元素。例如:

driver.FindElement(By.XPath("//div[@class='login']//a[@href='#']"), Globals.TIMEOUT).Click();
var loginField = driver.FindElement(By.XPath("//div[@id='login_box']//input[@name='login_name']"));
jdriver.ExecuteScript("arguments[0].setAttribute('value', '" + login + "')", loginField);
var passwordField = driver.FindElement(By.XPath("//div[@id='login_box']//input[@name='login_password']"));
jdriver.ExecuteScript("arguments[0].setAttribute('value', '" + password + "')", passwordField);
driver.FindElement(By.XPath("//div[@id='login_box']//input[@type='submit']")).Click();
driver.FindElement(By.XPath("//div[@class='nameuser']"), Globals.TIMEOUT);
我以为可以将XPath值放入常量字符串中,但是在阅读代码时查看元素的实际XPath非常有帮助。但是另一方面,当某些对象的XPath更改时,我必须在使用它的所有位置进行更改。 那么,解决此问题的最佳解决方案是什么?

2 个答案:

答案 0 :(得分:1)

使用硒Page Object Model using Page factory。帮助维护干净的代码并增强代码的可读性。

答案 1 :(得分:0)

创建页面目标文件。

例如,如果您大量使用"//div[@id='login_box']//input[@type='submit']"之类的xPath,则在页面目标文件中放置:

var loginSubmit = "//div[@id='login_box']//input[@type='submit']"

然后在您的主文件中导入页面目标文件:

using myPageObjectFile

driver.FindElement(By.XPath(myPageObjectFile.loginSubmit));

我的C#不好,所以可能不完全是这样。但是某种效果应该可以工作。

这样,当xPath更改时,只需要在页面目标文件中对其进行调整即可。