入力(type =ボタン)を送信しようとしていますが、値を更新できません。どんな助けでも大歓迎です。参考までに、以下のテストケースを添付しました。
CLICK FAILS HEREを検索
from Selenium import webdriver
from Selenium.webdriver.common.by import By
from Selenium.webdriver.support.ui import Select
from Selenium.common.exceptions import NoSuchElementException
import unittest, time, re,datetime,os,sys
from Selenium.webdriver.common.keys import Keys
from Selenium.webdriver.common.action_chains import ActionChains
def is_element_present(inst,selector,value):
try:
inst.find_element(by=selector, value=value)
return True
except:
return False
class Testing(unittest.TestCase):
def setUp(self):
self.driver = webdriver.Chrome()
self.driver.implicitly_wait(5)
self.base_url = "http://new.ossmoketest.appspot.com/"
self.verificationErrors = []
def test_ing(self):
try:
driver = self.driver
driver.get(self.base_url + "/Apab4b39d4_09d7_11e1_8df9_139372201eeb/1/signin?forward=/%3F")
now = datetime.datetime.now()
start = time.clock()
for i in range(5000000):
try:
if is_element_present(driver,By.ID,"userid"): break
except: pass
else: self.fail("time out")
end = time.clock()
diff = end - start
print diff
driver.find_element_by_id("userid").clear()
driver.find_element_by_id("userid").send_keys("[email protected]")
driver.find_element_by_xpath("//input[@src='/static/images/signup.png']").click()
print 'finished'
start = time.clock()
for i in range(5000000):
try:
if is_element_present(driver,By.LINK_TEXT,"Logout"): break
except: pass
else: self.fail("time out")
end = time.clock()
diff = end - start
print diff
time.sleep(5)
start = time.clock()
name = "smoketest"+ str(now.minute) +str(now.second)
for i in range(5000000):
try:
if is_element_present(driver,By.LINK_TEXT,"PurchaseOrder"): break
except: pass
else: self.fail("time out")
end = time.clock()
diff = end - start
driver.find_element_by_link_text('PurchaseOrder').click()
name = "smoketest"+ str(now.minute) +str(now.second)
start = time.clock()
for i in range(5000000):
try:
if is_element_present(driver,By.ID,"Customer_Name"): break
except: pass
else: self.fail("time out")
end = time.clock()
diff = end - start
newproduct = "rexona"+ str(now.minute) +str(now.second)
newprice = str(now.minute) +str(now.second)
newprice = float(newprice)
print newprice
driver.find_element_by_xpath("//input[starts-with(@id,'New_Product')]").send_keys(newproduct)
driver.find_element_by_xpath("//input[starts-with(@id,'Price')]").clear()
time.sleep(3)
driver.find_element_by_xpath("//input[starts-with(@id,'Price')]").send_keys(Keys.CONTROL+'a'+Keys.NULL, str(newprice))
Mouse_cntrl = ActionChains(driver)
Mouse_cntrl.release(driver.find_element_by_xpath("//input[starts-with(@id,'Price')]"))
value = newprice
print value
time.sleep(2)
print 'start'
print driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").get_attribute('data-id')
# ------------------------CLICK FAILS HERE ------------------------------
# driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").click()
# driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").submit()
driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]").send_keys(keys.ENTER)
# Mouse_cntrl.double_click(driver.find_element_by_xpath("//input[starts-with(@id,'NewItem_NewItem')]"))
for i in range(10):
try:
print driver.switch_to_alert().text
if driver.switch_to_alert():
driver.switch_to_alert().accept()
break
except: pass
time.sleep(1)
else:
print "alert not found"
print 'finished -- '
time.sleep(8)
driver.find_element_by_xpath("//input[starts-with(@id,'Product')]").click()
arg = newproduct
print 'end'
for i in range(60):
try:
if is_element_present(driver,By.LINK_TEXT,arg): break
except: pass
time.sleep(1)
else: self.fail("time out")
# sel.mouse_over("//html/body/ul/li/a[.=\""+arg+"\"]")
driver.find_element_by_link_text(arg).click()
start = time.clock()
time.sleep(25)
for i in range(1000000):
try:
if newprice == float(driver.find_element_by_id('Unit_Price').text):
end = time.clock()
diff = end - start
log.log(module='Smoke',testcase='Action New', result='Pass',time_taken= diff)
break
except: pass
else:
log.log(module='Smoke',testcase='Action New', result='Fail')
self.fail('New Failure')
log.log(module='Smoke',testcase='On Submit', result='Pass',time_taken= diff)
driver.find_element_by_id('Quantity').send_keys(Keys.CONTROL+'a'+Keys.NULL,"1")
time.sleep(5)
start = time.clock()
for i in range(1000000):
try:
if value == float(driver.find_element_by_id('Unit_Price').text):
end = time.clock()
diff = end - start
log.log(module='Smoke',testcase='Multiply', result='Pass',time_taken= diff)
break
except: pass
else: self.fail("time out")
for i in range(1000000):
try:
if value == float(driver.find_element_by_id('Amount').text):
end = time.clock()
diff = end - start
log.log(module='Smoke',testcase='DSUM with Parent', result='Pass',time_taken= diff)
break
except: pass
else:
end = time.clock()
diff = end - start
log.log(module='Smoke',testcase='DSUM with Parent', result='Fail',time_taken= diff)
self.fail("time out")
except:
self.driver.quit()
e = sys.exc_info()[1]
print str(e)
def tearDown(self):
self.driver.quit()
self.assertEqual([], self.verificationErrors)
if __name__ == "__main__":
unittest.main()
それは私の仕事の目玉でした。どんな助けでも大歓迎です。ありがとう
.click()
を.send_keys("\n")
に置き換えてみることができます。これは、「要素に焦点を合わせながらEnterキーを押す」と同じです。
したがって、この:
driver.find_element_by_link_text('PurchaseOrder').click()
これになります:
driver.find_element_by_link_text('PurchaseOrder').send_keys("\n")
これが他の人にとってまだ繰り返し発生する問題である場合、コードが正しいことを確認し(エラーなどを確認した)、それでもfind_element_by_...('text').click()
関数が正しく機能していないことがわかった場合は、多くの場合、 JavaScriptがページを更新する前にコードが実行され続けるため、.
簡単な解決策は、_import time
_を実行し、click()
メソッドの直後に以下のコードを挿入することです。
_time.sleep(2)
_
スリープタイマーの持続時間は、選択したものであれば何でもかまいません。私の場合、2秒を使用しました。うまくいけば、それが役立つでしょう。
私もこの問題を抱えていました。 時々、何らかの理由でWebドライバーがボタンをクリックしませんでした。ボタンを見つけることができました(NoSuchElementExceptionをスローせず、WebDriverWaitは役に立ちませんでした)。
ボタンを2回クリックする際の問題は、最初のクリックが成功した場合、2番目のクリックが失敗することでした(または、一致するものが見つかった場合は、次のページの送信ボタンをクリックしてください!)。私の最初の試みは、2回目のクリックをtry/exceptブロックに入れることでした。これが次のページの[送信]をクリックしてそれを見つけた方法です。 XDまた、2番目のボタンが見つからなかった場合、テストの速度が大幅に低下しました。
Selenium 2.0b3 IE WebDriver、Click not fireing でいくつかの良い洞察を見つけました。基本的に、最初に親要素をクリックしますが、何もしないようです。次にクリックします。送信ボタンで。
Click()する要素がURLの場合。 hrefプロパティを取得し、driver.get(elem.get_attribute('href'))
を使用するのが最もクリーンであることがわかりました。
2つの部分からなるドロップダウンメニューを選択しても、適切な選択で生成されるはずのものが生成されないという同じ問題がありました。時間をインポートし、2つの「クリック」の間にtime.sleep(2)を使用すると機能しました。 (参考までに、find_element_by_xpathを使用してオプションの変更を見つけました。)
className
、cssSelector
などの他の要素ファインダーを試してみます。要素が見つからない場合、xPathがエラーを提供しないことがあります。したがって、最初に、要素がWebdriverによって実際に検出されたかどうかを確認することから始めます。
click
を試すか、他のコマンドを使用することもできます2回連続して。これはすでにそのような問題のいくつかを解決しました。