Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Selenium中标识动态文本框的句柄_Selenium_Selenium Webdriver - Fatal编程技术网

在Selenium中标识动态文本框的句柄

在Selenium中标识动态文本框的句柄,selenium,selenium-webdriver,Selenium,Selenium Webdriver,我试图在Selenium中处理动态标签名称 假设我有: Website 1 > Login page > Username : TextBox Website 2 > Login page > User : TextBox Website 3 > Login page > Login : TextBox 因此,有3种不同类型的登录标签名称,显然它们的文本框定位器名称或ID也会有所不同。 如何保持通用性,以便代码直接关注登录文本框以输入用户名,

我试图在Selenium中处理动态标签名称

假设我有:

Website 1 > Login page > Username : TextBox 
Website 2 > Login page > User     : TextBox
Website 3 > Login page > Login    : TextBox
因此,有3种不同类型的登录标签名称,显然它们的文本框定位器名称或ID也会有所不同。 如何保持通用性,以便代码直接关注登录文本框以输入用户名,而不考虑文本框的不同id、名称或xpath

任何建议都会大有帮助。

这就是模式可以帮助您的地方

这里的想法是定义一个
LoginPage
类(),该类将包含“login”、“password”字段、“submit”按钮以及其他所需的所有内容。您可以让构造函数定义特定于网站的定位器,也可以将
LoginPage
子类化,并让
WebSite1LoginPage
WebSite2LoginPage
等类具有自定义定位器

在任何情况下,这种方法都可以帮助您抽象出登录页面并隐藏实现/位置详细信息,从而使您的测试易于阅读和支持

另见:


如果所有3个窗口/站点之间登录字段的路径不共享唯一映射到元素的公共路径,则您别无选择,只能定义3个元素

根据您提供的示例,减少重复的一种方法是根据您访问的网站参数化“用户名、用户、登录”位

比如:

if website1
  login = "username"
elsif website2
  login = "user"
elsif website3
  login = "login"
end

element = find("xpath#{login}xpath")