使用Python将%s放置在WebDriverWait中的位置

时间:2018-10-06 04:29:40

标签: python selenium selenium-webdriver

因此,我的python脚本应该登录到一个网站,并等待直到出现我设置的鞋子尺码的按钮,以便可以单击它,但是如何使用WebdriverWait将“%size”放置在哪里?它会在所有3个括号之后还是在所有3个括号之前?

size = 9.5
sizeselect = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//button[@data-qa="size-dropdown" and .="%s"]')))
sizeselect.click()

例如,下面的代码是正确的方法吗?

size = 9.5
sizeselect = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//button[@data-qa="size-dropdown" and .="%s"]'))) % size
sizeselect.click()

还是%大小必须在第二个括号之后

size = 9.5
sizeselect = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//button[@data-qa="size-dropdown" and .="%s"]')) % size)
sizeselect.click()

2 个答案:

答案 0 :(得分:0)

%s是某种类型的占位符,用于您要传递到字符串中的确切子字符串。您应该将实际的子字符串放在字符串之后:

"foo %s bar" % "baz"  # "foo baz bar"

所以您的情况应该是

sizeselect = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//button[@data-qa="size-dropdown" and .="%s"]' % size)))

字符串占位符类似的是format()

"foo {} bar".format("baz")  # "foo baz bar"

以您的情况

sizeselect = WebDriverWait(driver, 5).until(EC.presence_of_element_located((By.XPATH, '//button[@data-qa="size-dropdown" and .="{}"]'.format(size))))

您可以查看有关字符串格式here的更多信息

答案 1 :(得分:0)

由于您需要以鞋子大小调用click(),而不是将expected_conditions用作presence_of_element_located,因此需要使用 {{1} } 如下:

  • 使用绝对值

    element_to_be_clickable
  • 使用变量

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@data-qa="size-dropdown" and contains(.,'9.5')]"))).click()
    
  • 使用size = 9.5 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@data-qa="size-dropdown"][.='" + size + "']"))).click()

    %s
  • 使用size = 9.5 WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@data-qa="size-dropdown and contains(text(), '%s')]" % (size)))).click()

    format()