我有一个使用Cucumber和Capybara进行测试的Rails项目。 我有一个使用Dropzone.js的文件上传页面。 我的上传工作很有用,可以使用对话框或拖放。 测试是另一回事。 我的表格中有以下字段: 但是,在步骤定义中,我尝试了一些查找和附加文件数据的方法,但它们都不起作用。 我试过fill_in: fill_in “photo_image”, with: photo 我试过用css选择器找到: find(‘#photo_image’).set photo 我试过用xpath找到: find(:xpath, “//input[@id=’photo_image’]”).set photo 但他们都没有看到隐藏的领域。 Unable to find css “#photo_image” (Capybara::ElementNotFound) Unable to find xpath “//input[@id=’photo_image’]” (Capybara::ElementNotFound) Unable to find field “photo_image” (Capybara::ElementNotFound) 有没有可以使用Dropzone.js处理上传的测试方法还是没有希望?
我正在尝试使用Capybara提取混合模式内容。 我是用Nokogiri做的 ,但是想知道为什么与Capybara不可能相似。 require ‘nokogiri’ doc = Nokogiri::HTML(“NameA Johnson “) puts doc.at_xpath(“//h1/text()”).content 它可以工作,但是当我在Capybara中尝试相同的XPath选择器时,它不起作用。 visit(‘http://stackoverflow.com’) puts find(:xpath, “//h1/text()”).text 它引发了错误: [remote server] file:///tmp/webdriver-profile20120915-8089-kxrvho/extensions/fxdriver@googlecode.com/components/driver_component.js:6582:in `unknown’: The given selector //h1/text() is either invalid or does not result in a WebElement. The following error occurred: (Selenium::WebDriver::Error::InvalidSelectorError) [InvalidSelectorError] The result of the xpath expression “//h1/text()” is: [object Text]. It should be […]
我有以下XML文档: foo1 foo2 data1 data2 foo3 foo4 我只需要抓取type = “foo:elementType1″的元素。 我尝试过这个,但是我得到了空洞的结果。 elems = doc.search(“//elements[@type=’foo:elementType1′]”) 我错过了什么?
我有一张桌子: html =’ Bill Statement Detail Bill Date Bill Amount Bill Due Date Bill (PDF) ‘ 我使用这篇文章中建议的代码( 表中的XPath匹配文本 – Ruby – Nokigiri )。 如果我使用第一行中的任何单词作为匹配单词,例如“Statement”,它就可以正常工作。 但是如果我使用另一行中的单词,例如“Amount”,它就不起作用。 doc = Nokogiri::HTML(“#{html}”) doc.xpath(‘//table[contains(descendant::*, “Statement”)]’).each do |node| puts node.text end
我在nokogiri xpath解析器的Chrome开发人员工具中使用了Copy Xpathfunction。 但就像这个问题一样 ,Chrome和Firefox的开发人员工具会隐式插入像 这样的标签。 有没有办法获得我可以用于nokogiri xpath解析器的“真正的”xpath?
我正在尝试使用Nokogiri从两个独特的标签集之间提取文本。 什么是在p-tag中获取文本的最佳方法 The problem 和 The solution ,然后全部 The solution 和 之间的HTML? 完整html的示例: The problem TEXT I WANT The solution HTML I WANT with it’s own set of tags (but never an or ) 谢谢!
我找不到Nokogiri支持的xpath版本的官方声明。 有人可以帮我吗? 实际上我想提取一些具有以指定子字符串开头的属性的元素。 例如,我想让所有具有category属性的Book元素以字符C开头。 如何用nokogiri做到这一点? Everyday Italian Giada De Laurentiis 2005 30.00 Harry Potter J K. Rowling 2005 29.99 XQuery Kick Start James McGovern Per Bothner Kurt Cagle James Linn Vaidyanathan Nagarajan 2003 49.99 Learning XML Erik T. Ray 2003 39.95
尝试理解显式等待的方法。 require ‘rubygems’ require ‘selenium-webdriver’ require ‘cucumber’ $driver = Selenium::WebDriver.for :firefox $driver.manage.timeouts.implicit_wait = 3 Then /^do search$/ do driver = $driver one_way = driver.find_element(:id, “search.ar.type.code.oneWay”).click sleep 5 from = driver.find_element :xpath => “//div[@class = ‘origin column1’]//input[@type = ‘text’]” from.click 因此,在单击one_way单选按钮并且输入表单发生更改后,我将sleep 5设置为显示时间元素,否则将出现错误“元素不可见…”。 所以我认为这是理解显式等待的好时机,因为我需要等到元素出现。 wait = Selenium::WebDriver::Wait.new(:timeout => 40) wait.until {from = driver.find_element(:xpath, “//div[@class = ‘origin column1’]//input[@type […]
我想使用Nokogiri来提取包含特定属性名称的元素中的所有节点。 例如,我想在下面的文档中找到包含属性“blah”的2个节点。 @doc = Nokogiri::HTML::DocumentFragment.parse <<-EOHTML Three’s Company A love triangle. test test test EOHTML 我在这个网站上找到了这个建议(见下文): http : //snippets.dzone.com/posts/show/7994 ,但它没有返回上面例子中的2个节点。 它返回一个空数组。 # get elements with attribute: elements = @doc.xpath(“//*[@*[blah]]”) 关于如何做到这一点的想法? 谢谢! 我在这里找到了这个
给定一个元素作为上下文我想选择前面的兄弟元素并检查它是否具有特定的名称。 需要注意的是,如果存在具有非空白内容的插入文本节点,我不想选择它。 例如,给定这个XML文档…… a1a2 b a3 a4 a5 …然后: 对于“a1”,应该没有匹配(紧接在它之前的兄弟元素) 对于“a2”,则应匹配“a1”(没有插入的文本节点) 对于“a3”,应该没有匹配(存在具有非空白内容的插入文本节点) 对于“a4”,则应匹配“a3”(插入的文本节点仅为空格) 对于“a5”,应该没有匹配(前面的兄弟元素不是 )。 我可以检查前面的兄弟姐妹是否是 with preceding-sibling::*[1][name()=”a”] 但是,我无法弄清楚如何说“选择以下兄弟节点,无论元素或文本,看看是不是文本还是normalize-space(.)=”” 。我最好的猜测是这样的: preceding-sibling::*[1][name()=”a”][following-sibling::node()[1][not(text()) or normalize-space(.)=””]] ……但似乎没有效果。 这是我的测试Ruby文件: require ‘nokogiri’ xpath = ‘preceding-sibling::*[1][name()=”a”][following-sibling::node()[1][not(text()) or normalize-space(.)=””]]’ fragment = Nokogiri::XML.fragment ‘a1a2 b a3 a4 a5’ fragment.css(‘a’).each{ |a| p [a.text,a.xpath(xpath).to_s] } #=> [“a1”, “”] #=> [“a2”, “”] #=> [“a3”, “a2”] #=> […]