Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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
Page object gem 页面对象gem:根据对象的可见性识别具有相同属性的对象_Page Object Gem - Fatal编程技术网

Page object gem 页面对象gem:根据对象的可见性识别具有相同属性的对象

Page object gem 页面对象gem:根据对象的可见性识别具有相同属性的对象,page-object-gem,Page Object Gem,我有一个包含以下html的文本框。id是动态的,我无法使用它。我在文本框中填充了一些文本。 有一个“添加”按钮,当我单击该按钮时,将创建一个新选项卡。在“新建”选项卡中,我将有一个与上述属性相同的文本框,只是正在创建一个新的id 两个文本框位于同一页上,但位于不同的选项卡中,其中一个是可见的,另一个是不可见的。选项卡显示为div。选项卡和其中的字段之间没有关系。选项卡显示如下: 选项卡#1选项卡#2 如何根据这些文本框的可见性识别它们 谢谢大家! 我认为最好的方法是在这两个元素之间找到一些区

我有一个包含以下html的文本框。
id
是动态的,我无法使用它。我在文本框中填充了一些文本。

有一个“添加”按钮,当我单击该按钮时,将创建一个新选项卡。在“新建”选项卡中,我将有一个与上述属性相同的文本框,只是正在创建一个新的
id

两个文本框位于同一页上,但位于不同的选项卡中,其中一个是可见的,另一个是不可见的。选项卡显示为div。选项卡和其中的字段之间没有关系。选项卡显示如下:

选项卡#1选项卡#2

如何根据这些文本框的可见性识别它们


谢谢大家!

我认为最好的方法是在这两个元素之间找到一些区别性质。例如,HTML中必须至少有某种东西使一个可见,而不是另一个

但是,如果这不是一个选项,我认为剩下的唯一选项是遍历所有可能的文本字段,并选择一个可见的字段

例如,在下一页中有两个文本字段,第一个不可见:

<html>
  <body>
    <div style="display:none;">
      <input type="text" id="1">
    </div>
    <div>
      <input type="text" id="2">
    </div>    
  </body>
</html>
使用页面对象时,您将看到
field\u元素
将是第二个文本字段,因为它是可见的:

page = MyPage.new(browser)
p page.field_element.attribute('id')
#=> "2"
请注意,为了保持示例的简单性,访问器的块将遍历所有文本字段。但是,您可以将其他参数传递给
text\u field\u元素
,以便更具体地检查哪些文本字段。例如,以下访问器将查找具有特定标题的第一个可见文本字段:

text_field(:text2){ text_field_elements(:title => 'MyText').find(&:visible) }

您能给出一个显示这两个字段的HTML示例吗?考虑到存在选项卡,我认为您应该根据选项卡元素而不是可见性进行区分。选项卡仅显示为div。我已经更新了选项卡的html。我尝试将其作为
text\u字段(:text2){text\u字段元素。查找(:title=>'MyText',&:visible)}
得到一个错误
Watir::Exception::ObjectReadOnlyException:object是只读的{:element=>,:type=>“(任意文本类型)”,:tag\u name=>“input或textarea”}
我是否以错误的方式传递附加参数?需要将:title定位器添加到
text\u field\u elements
方法,而不是
find
方法。我在答案中添加了这个例子。非常感谢你,贾斯汀<代码>文本字段(:text2){text字段元素(:title=>'MyText')。查找(&:visible)}为我解决了问题。
text_field(:text2){ text_field_elements(:title => 'MyText').find(&:visible) }