2017-06-29 24 views
0

動的に位置を変更する特定の要素をクリックしようとしているため、xpathscss selectorsも同様に変更されます。Selenium webdriverwaitが要素内の要素を見つける

試行されたxpath。

//*[@id="hld"]/div/div[X]/div[1]/h2/select

注: Xは、種々の要因に応じて2〜10の範囲です。

classの名前やIDsのいずれも使用できません。私と一緒に作業しなければならないのは、tagの名前だけです。

私の現在のコードは以下の通りです。

h2 = driver.find_element_by_tag_name("h2") 
select = h2.find_element_by_tag_name("select") 
select.click() 

残念ながらselectタグはH2タグの後にいくつかの時間をロードします、と私は要素が上記のコードを実行する前に、目に見える/クリック可能になるまで待機するwebdriverwaitをやろうとしています。

悲しいことに、悲しいことに、select要素を単一にする正しい構文は私には分かりません。以下はh2タグを見つけるコードですが、selectタグに焦点を当てて展開しようとしています。

WebDriverWait(driver, 30).until(
EC.visibility_of_element_located((By.TAG_NAME, "h2"))) 

すべてのヘルプは大歓迎です。

+0

をデベロッパーに連絡して、Select Tagの一意のIDを提供するように依頼してください。これは最も簡単な解決策になります。 –

+0

@ Tjj226_Angel公開URLの場合、URLの共有を検討できますか?ありがとう – DebanjanB

答えて

0

動的divロケータを削除してみてください。ドライバはページ上の要素を反復処理し、存在する場合はそれをクリックします。

from selenium.webdriver.common.by import By 
 
from selenium.webdriver.support import expected_conditions as ec 
 
from selenium.webdriver.support.ui import WebDriverWait 
 

 
xpath = ".//[@id="hld"]/div/div/div/h2/select" 
 
timeout = 30  
 

 
WebDrierWait(driver, timeout).until(ec.presence_of_element_located(By.XPATH)) 
 

 
driver.find_element_by_xpath(xpath).click()

ドライバがあなたのXPathに一致する複数のXPathを発見された場合はそれ以外の場合は、あなたのような何かを試みることができる:、

むしろ周りの作業よりも

elements = driver.find_elements_by_xpath(xpath) 
 

 
for element in elements: 
 
    try: 
 
     element.click() 
 
    except ElementNotVisibleException: 
 
     pass 
 
    
 

関連する問題