Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/40.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
Css Watir:第一个表格单元格内a-href的选择器_Css_Ruby_Cucumber_Watir_Gherkin - Fatal编程技术网

Css Watir:第一个表格单元格内a-href的选择器

Css Watir:第一个表格单元格内a-href的选择器,css,ruby,cucumber,watir,gherkin,Css,Ruby,Cucumber,Watir,Gherkin,我有我的css别名,比如: module MyPage def locator(key, *options) hash = { "FIRST_TABLE_CELL_HREF" => [ :css => '#my-table td:nth-child(1):first a'] } end 我想单击该别名: @page.find("FIRST_TABLE_CELL_HREF").when_present.right_click 问题:这是一个

我有我的css别名,比如:

module MyPage

  def locator(key, *options)
    hash = {
        "FIRST_TABLE_CELL_HREF" => [ :css => '#my-table td:nth-child(1):first a']
    }
  end
我想单击该别名:

@page.find("FIRST_TABLE_CELL_HREF").when_present.right_click
问题:这是一个Javascript风格的别名,因此无法使用

问题:如何编写相同的Ruby样式css别名

p.S.
$(“#我的表td:nth child(1):first a”)
在浏览器控制台中运行良好

对于@TitusFortner当您想要选择特定元素时,这是正确的。但我正在使用一些业务级别的语言(在我的例子中是小黄瓜),我想编写一个通用指令。当我右键单击元素“FIRST\u TABLE\u CELL\u HREF”时,它看起来像是
。该指令将映射到:

When(/^I right click(?: on|)(?: the|) "([^\"]*)"$/i) do |scope|
  @page.find(scope).when_present.right_click
end

Where
@page=@browser.visit(SomePage)
,依次
@browser=BrowserBase.new start\u browser(ENV['browser'])
使用Watir,您通常甚至不需要使用css

browser=Watir::browser.new

表中的第一个链接:

browser.table(id:“我的表”).link

表中第一个数据单元中的链接:

browser.table(id:'my table').td.link

如果出于某种原因只能使用css:

browser.link(css:“#我的表格a”)

此外,如果您的表位于iframe的上下文中,则必须显式声明它,因为驱动程序只能看到顶级浏览上下文,除非特别切换到。对于Watir,这将起作用:

browser.iframe(id:'iframe_id')。table(id:'my table')。link

这是行不通的:


browser.link(css:“#iframe\u id#my table a”)

如果链接位于第一个表格单元格中,是否意味着它是表格中的第一个链接?根据您如何定义
find
方法,您可以执行
:css=>“#我的表a”
。通过给出
find
方法的定义和HTML表的一个示例,这将有助于澄清这个问题。@JustinKo您的意思是
“第一个\u表\u单元格\u HREF”=>[:css=>“#我的表a',:index=>0]
?如果没有
:index=>0
,这对meI来说是行不通的,因为Watir隐式地做到了这一点。但是,考虑到这不起作用,我认为您必须分享
find
方法的作用,并给出一个示例表来说明问题。不幸的是,仅仅知道它不起作用并不能帮助我们确定问题/解决方案。@JustinKo请看我问题的最后一部分。这足够了吗?这找不到您想要的元素吗
@browser.element(css:“#我的表td a”)
如果它没有,您能验证它是否不在iframe中吗?第二个问题是css本身可能并不总是能满足您的需要,使用cucumber根本不会影响这一点。您当前的查找方法是这样的
@browser.element(css:locator[scope])
如果您的locator方法返回如下哈希值:
{'FIRST\u TABLE\u CELL\u HREF'=>“TABLE(id:'my TABLE').td}
则您的find方法可以如下:
@browser.send(locator(scope))