【问题标题】:Can't access text box using selenium无法使用 selenium 访问文本框
【发布时间】:2018-09-27 00:22:22
【问题描述】:

我正在尝试在网站的结帐页面上填写表格,但我无法这样做。输入元素如下所示:

<input first_and_last="true" placeholder="name" class="string required" 
 type="text" name="order[billing_name]" id="order_billing_name">

目前,我正在尝试使用以下代码在框中输入:

driver.find_element_by_name('order[billing_name]').send_keys('hello')

但是,当我运行程序时出现此错误:

selenium.common.exceptions.WebDriverException: Message: unknown error: 
Failed to execute 'getComputedStyle' on 'Window': parameter 1 is not of type 'Element'.

我不完全确定问题是什么。有人可以帮我解决这个问题吗?提前谢谢你。

【问题讨论】:

    标签: javascript google-chrome selenium selenium-webdriver textfield


    【解决方案1】:

    你可以试试。

    new WebDriverWait(driver, 2000).until(ExpectedConditions.element_to_be_clickable((By.ID, 'order_billing_name')));
    
    driver.find_element_by_id('order_billing_name').send_keys('hello');
    

    【讨论】:

      【解决方案2】:

      我认为你必须明确等待

      waitElem = WebDriverWait(driver, 10)
      element = waitElem .until(EC.element_to_be_clickable((By.ID, 'order_billing_name'))) 
      
      element.send_keys("XXXXX")
      

      【讨论】:

        【解决方案3】:

        我认为这是因为您的数组中有超过 1 个名称为 "order[billing_name]" 或相同的 billing_names 的元素,因此 selenium 无法找到目标元素,请尝试使用唯一的属性访问元素,我认为id 是不错的选择:driver.find_element_by_id("order_billing_name")

        【讨论】:

          【解决方案4】:

          您可以尝试以下方法之一:

          ID:

          driver.find_element_by_id('order_billing_name').send_keys('hello')
          

          cssSelctor

          driver.find_element_by_css_selector('input[class='string required']').send_keys('hello')  
          

          尝试其中任何一种,然后告诉我状态。

          【讨论】:

          • cssSelector 仍然遇到同样的问题。 ID 出现问题:“无法在 'Node' 上执行 'contains':参数 1 不是 'Node' 类型。”如果我这里有 html 代码会有帮助吗?
          • 是的,这会有所帮助!
          【解决方案5】:

          根据您共享的 HTML,将一些文本发送到 &lt;input&gt; 元素中,您可以使用以下代码行:

          • css_selector

            driver.find_element_by_css_selector("input.string.required#order_billing_name").send_keys("hello")
            
          • xpath

            driver.find_element_by_xpath("//input[@class='string required' and @id='order_billing_name']").send_keys("hello")
            

          【讨论】:

            【解决方案6】:

            尝试使用 id:

            driver.find_element_by_id("order_billing_name")
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2017-07-25
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多