使具有大量 XPath-s 的 selenium 代码更具可读性

Make selenium code with a lot of XPath-s more readable

我注意到,当我使用 selenium 网络驱动程序与网页上的元素进行交互时,我的代码变得不可读,因为我使用了大量的 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 发生变化时,我必须在所有使用它的地方进行更改。 那么这个问题的最佳解决方案是什么?

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

创建页面对象文件。

例如,如果您经常使用像 "//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发生变化时,只需要在页面对象文件中进行调整即可。