Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.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
使用Python和SeleniumWebDriver 2基于td中的隐藏输入值查找祖先tr_Python_Selenium_Selenium Webdriver - Fatal编程技术网

使用Python和SeleniumWebDriver 2基于td中的隐藏输入值查找祖先tr

使用Python和SeleniumWebDriver 2基于td中的隐藏输入值查找祖先tr,python,selenium,selenium-webdriver,Python,Selenium,Selenium Webdriver,我试图让WebDriver将鼠标悬停在表行上,以便显示“删除”链接。每一行都包含一个以项名称作为值的隐藏输入,并且由于编写测试的人知道项名称(但它出现的特定行不知道),因此我尝试使用项名称查找该行 我的基本计划是定位输入,然后查找其祖先 我尝试了Xpath和CSS,虽然我可以接近(我可以得到输入),但似乎无法回到元素。由于输入是隐藏的,我不能简单地将鼠标悬停在它上面 以下是我得到的: def delete_row_by_item_or_task_name(self, item_name=None

我试图让WebDriver将鼠标悬停在表行上,以便显示“删除”链接。每一行都包含一个以项名称作为值的隐藏输入,并且由于编写测试的人知道项名称(但它出现的特定行不知道),因此我尝试使用项名称查找该行

我的基本计划是定位输入,然后查找其祖先

我尝试了Xpath和CSS,虽然我可以接近(我可以得到输入),但似乎无法回到元素。由于输入是隐藏的,我不能简单地将鼠标悬停在它上面

以下是我得到的:

def delete_row_by_item_or_task_name(self, item_name=None, task_name=None):
    try:
        if item_name:
            name = item_name
            table_id = 'invoice-items'
        if task_name:
            name = task_name
            table_id = 'invoice-time'
        # tr = self.driver.find_element_by_css_selector("#" + table_id + " input[value=" + name + "]")

        tr = self.driver.find_element_by_xpath("//*[@id='" + table_id + "']/tbody/tr/td/div/div/input[contains(.,'" + name + "')]")
        import pdb; pdb.set_trace()
        self.hover(tr)
        self.driver.find_element_by_link_text('Delete line').click()
CSS选择器可以工作,如果我在其中放入一个pdb并检查变量“td”是一个web元素。但正如我提到的,我不能将鼠标悬停在隐藏的输入上,尝试添加/祖先::tr会导致异常(WebDriverException)

Xpath导致nosucheElement异常,无论是否使用/祖先::tr


如果缺少所需的任何信息,请告诉我,我很乐意提供更多详细信息。

基于您的xpath,我假设您的HTML看起来像:

<table id="table_id">
    <tbody>
        <tr>
            <td>
                <div>
                    <div>
                        <input value="item_name" type="hidden" >
                    </div>
                </div>
            </td>
        </tr>
    </tbody>
</table>
这将直接返回
元素,因此不需要查找输入元素的祖先。基本上这是说,‘找到包含输入元素的tr’

"//table[@id='" + table_id + "']/tbody/tr[./td/div/div/input[contains(@value, '" + name + "')]]"