Aşağıdaki parçacıkta, AnyEc için bağımsız değişkenler olan iki işlevi manuel olarak girdim.Liste uzunluğu boyunca işlevler ve işlev listesi oluşturma
def element_visible(context, element_id):
element = WebDriverWait(context.browser, 10).until(AnyEc(
expected_conditions.visibility_of_element_located((By.ID, element_id[0])),
expected_conditions.visibility_of_element_located((By.ID, element_id[1]))
))
return element
Ben
listesi uzunluğuna bağlı olarak, fonksiyonlar olarak bu argümanlar ELEMENT_ID oluşturmak mümkün olacaktır nasıl
?
Her biri için kullanmayı denedim, ancak bir dize argümanı olarak ayrıştırılmamış bir virgülle ayrılmış işlevler listesi oluşturamadım.
Düzenleme: Yinelenen işlevler şimdi önerilen güncelleştirmelerle çalıştırılıyor gibi görünüyor. Maalesef artık geri dönmek için fonksiyonlar alıyorum görünmüyor. Aşağıda
benim güncellenen kod:
class AnyEc:
# Use with WebDriverWait to combine expected_conditions in an OR
def __init__(self, *args):
self.ecs = args
def __call__(self, browser):
for fn in self.ecs:
try:
if fn(browser):
# Return element ID located and element object
return [fn.locator[1], fn(browser)]
except:
pass
def element_visible(context, element_id):
# Iterate through element_id list to provide args for AnyEc
args = [expected_conditions.visibility_of_element_located((By.ID, id)) for id in element_id]
element = WebDriverWait(context.browser, 10).until(AnyEc(*args))
return element
Düzenleme 2: Şu anda inelegant olmasına rağmen aşağıdaki kodu kullanarak başvurmadan ediyorum:
def element_visible(context, element_id):
if isinstance(element_id, str):
element = WebDriverWait(context.browser, 10).until(AnyEc(
expected_conditions.visibility_of_element_located((By.ID, element_id))
))
else:
element = WebDriverWait(context.browser, 10).until(AnyEc(
expected_conditions.visibility_of_element_located((By.ID, element_id[0])),
expected_conditions.visibility_of_element_located((By.ID, element_id[1]))
))
return element
hariç ... 'denemek çıkarın. –
Maalesef hala geri dönüşü olmayan sonuçlar. Deneme/geçiş, herhangi bir eleman bulunmazsa fonksiyonun aşağıdaki işleve geçmesine izin vermektir. Aynı komut dosyasını elle yazılmış bağımsız değişkenlerle çalıştırdığınızda, düzgün çalışıyor gibi görünüyor. – matchai
Python 2'de, yeni bir stil sınıfı almak için 'AnyEc (object):' sınıfını daha iyi kullanın. –